Skip to content

perf(release-vote-draft, release-vote-tally): render the vote drafts and decide the tally as code - #1617

Open
potiuk wants to merge 1 commit into
perf/release-mgmt-2-verify-rcfrom
perf/release-mgmt-3-votes
Open

potiuk wants to merge 1 commit into
perf/release-mgmt-2-verify-rcfrom
perf/release-mgmt-3-votes

Conversation

@potiuk

@potiuk potiuk commented Oct 13, 2026

Copy link
Copy Markdown
Member

Summary

Third PR of the stack; it builds on the verify-rc PR.

  • release-vote-draft:
    • verdict adds the planning-issue blocker and the verify-rc gate. A PASS counts only for this exact RC, FAIL or no comment blocks, and --skip-verify-check resolves it.
    • render --step 2 draws the [VOTE] subject and body with every conditional block, plus the atr vote start command.
    • render --step 3 --sent-at computes the close time.
  • release-vote-tally:
    • tally.py moves into the package unchanged.
    • verdict blocks on a previous AMBIGUOUS note.
    • archive-url and preclassify are new; preclassify parses bare vote lines only and leaves everything else to the agent.
    • tally --min-approvals applies the pr-approval rule.
    • render draws the [RESULT] [VOTE] mail, refuses a halted tally, and never puts reply text in the body.
  • Size: vote-draft goes from 6,842 to 5,409 tokens, vote-tally from 5,799 to 5,589. Each delivery mode, override, mechanism and outcome gets its own file.

Behaviour changes worth a look

  • A verify-rc PASS-WITH-WARNINGS proceeds, with a warning. Golden rule 5 says "PASS", but verify-rc's own Golden rule 4 treats PASS-WITH-WARNINGS as a PASS, and the Hard rule only forbids FAIL.
  • A missing URL, or a missing svn_revision under svnpubsub, is now a hard refusal rather than a placeholder.
  • The pr-approval rule is binding +1 >= approval_pr_min_approvals, with no veto. No veto was ever specified, and release votes can't be vetoed.
  • The github-discussion and maintainer-roster pass rules are unspecified and stay with the agent.
  • An expedited reason naming a CVE or "security" comes back as a warning, and rewording it stays the agent's job.
  • The atr vote start command quotes its configured values; the subject comes from a template.

Type of change

  • Skill change — eval fixtures updated below
  • Python package

Test plan

  • prek run --all-files passes on the stack tip.
  • tools/release-management: pytest / ruff / mypy, with two real-load integration tests.
  • Evals: twelve cases are now pytest cases named after each former case, with byte-identical expected bodies. The six kept judgement cases pass 3/3 per skill, against a baseline of 9/9 each.

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 5). I reviewed the diff and the test results; commits carry Generated-by:.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GTPsZ5aEE5bUVYqp47Dpvv

@potiuk potiuk added family:tools tools/* capability:triage Sweep + classify + propose disposition capability:resolve Close-out: invalidate, dedupe, CVE allocate, announcement family:release-management release-* skills substrate:release Tool substrate: release-artefact helpers (reproducible archive build, lint, comparison) labels Oct 13, 2026
@potiuk
potiuk added this pull request to stack #1620 October 13, 2026 14:14
@potiuk potiuk added family:tools tools/* capability:triage Sweep + classify + propose disposition capability:resolve Close-out: invalidate, dedupe, CVE allocate, announcement family:release-management release-* skills substrate:release Tool substrate: release-artefact helpers (reproducible archive build, lint, comparison) labels Oct 13, 2026
@potiuk
potiuk force-pushed the perf/release-mgmt-3-votes branch from c060705 to 50ebdbd Compare October 13, 2026 15:23
…and decide the tally as code

Both vote skills had the agent assemble the Step-0 verdict, fill in the
[VOTE] and [RESULT] [VOTE] mails, and compute the close time by hand.
tools/release-management now does it:

- vote-draft: `verdict` adds the planning-issue blocker and the
  verify-rc gate (a PASS counts only for this exact RC; FAIL or no
  comment blocks; --skip-verify-check resolves it). `render --step 2`
  draws the [VOTE] subject and body with every conditional block and
  the `atr vote start` command, appends How to verify to a canned body
  that lacks it, and refuses a missing URL, a missing svn revision
  under svnpubsub, or a window under 72h without --expedited; an
  expedited reason naming a CVE or "security" comes back as a warning,
  and rewording it stays the agent's job. `render --step 3 --sent-at`
  computes the close time.
- vote-tally: tally.py moves into the package unchanged (its own roster
  parser kept). `verdict` blocks on a previous AMBIGUOUS note until it
  is acknowledged, `archive-url` renders the archive template,
  `preclassify` parses only bare vote lines and leaves everything else
  to the agent, `tally --min-approvals` applies the pr-approval rule,
  and `render` draws the [RESULT] [VOTE] mail, refusing a halted tally;
  no reply text reaches the body. The github-discussion and
  maintainer-roster pass rules are unspecified and stay with the agent.

The `atr vote start` command quotes every configured value (the subject
comes from a configured template) with the shared shell helpers.

Each delivery mode, override, mechanism and outcome gets its own file;
prerequisites and references move to siblings. Golden rules, Hard
rules, Step 4, the generated blocks and the eval headings are unchanged.
vote-draft 6,842 → 5,409 tokens, vote-tally 5,799 → 5,589.

Twelve model-graded cases become pytest cases named after each former
case, with byte-identical expected bodies; six judgement cases stay
evals, each fixture now carrying the real tool output.

Generated-by: Claude Opus 5
Claude-Session: https://claude.ai/code/session_01GTPsZ5aEE5bUVYqp47Dpvv
@potiuk
potiuk force-pushed the perf/release-mgmt-3-votes branch from 50ebdbd to 6da06b7 Compare October 14, 2026 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

capability:resolve Close-out: invalidate, dedupe, CVE allocate, announcement capability:triage Sweep + classify + propose disposition family:release-management release-* skills family:tools tools/* substrate:release Tool substrate: release-artefact helpers (reproducible archive build, lint, comparison)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant